package com.zlh.rm.DAO;

import java.util.List;

import org.hibernate.Session;
import org.hibernate.mapping.Collection;

/**
 * @author zuolh
 * 
 */
public interface IBaseDao {
	/**
	 * 功能：获得数据库连接的Session
	 * 
	 * @return Session
	 */
	public Session getSession();

	/**
	 * 功能：根据hql语句得到记录总数
	 * 
	 * @param strhql
	 * @return int
	 */
	public int getTotalCount(String strhql);

	/**
	 * 功能：根据sql语句得到记录总数
	 * 
	 * @param strsql
	 * @return int
	 */
	public int getTotalCountBySql(String strsql);

	/**
	 * 功能：根据hql语句得到记录总数
	 * 
	 * @param strhql
	 * @param obj
	 * @return int
	 */
	public int getTotalCount(String strhql, Object obj);

	/**
	 * 功能：根据hql语句得到记录总数
	 * 
	 * @param strhql
	 * @param params
	 * @return int
	 */
	public int getTotalCount(String strhql, List params);

	/**
	 * 功能：根据sql语句得到记录总数
	 * 
	 * @param strsql
	 * @param param
	 * @return
	 */
	public int getTotalCountBySql(String strsql, List params);

	/**
	 * 功能：增加记录
	 * 
	 * @param entity
	 */
	public void create(Object entity);

	/**
	 * 功能：修改记录
	 * 
	 * @param entity
	 */
	public void update(Object entity);

	/**
	 * 功能：删除记录
	 * 
	 * @param entity
	 */
	public void delete(Object entity);

	/**
	 * 功能：删除数据
	 * 
	 * @param clazz
	 * @param id
	 */
	public void delete(Class clazz, long id);

	/**
	 * 功能：批量删除数据
	 * 
	 * @param clazz
	 * @param id
	 */
	public void batchDelete(Class clazz, long[] id);

	/**
	 * 功能：删除表中的所的记录
	 * 
	 * @param clazz
	 */
	public void deleteAll(Class clazz);

	/**
	 * 功能：删除记录集中的所的记录
	 * 
	 * @param entities
	 */
	public void deleteAll(Collection entities);;

	/**
	 * 功能：通过主键查询记录
	 * 
	 * @param clazz
	 * @param id
	 * @return Object
	 */

	public Object getByPk(Class clazz, int id);

	/**
	 * 功能：通过主键查询记录
	 * 
	 * @param clazz
	 * @param id
	 * @return Object
	 */
	public Object getByPk(Class clazz, long id);

	/**
	 * 功能：通过主键查询记录
	 * 
	 * @param clazz
	 * @param id
	 * @return Object
	 */
	public Object getByPk(Class clazz, String id);

	/**
	 * 功能：通过关键字和值来进行查询
	 * 
	 * @param clazz
	 * @param keyName
	 * @param keyValue
	 * @return 得到的Object是List
	 */
	public Object loadByPk(Class clazz, String keyName, Object keyValue);

	/**
	 * 功能：根据hql查询记录
	 * 
	 * @param strhql
	 * @return List
	 */
	public List find(String strhql);

	/**
	 * 功能：根据hql查询记录
	 * 
	 * @param strhql
	 * @param param
	 * @return List
	 */
	public List find(String strhql, Object param);

	/**
	 * 功能：根据hql查询记录
	 * 
	 * @param strhql
	 * @param name
	 * @param param
	 * @return List
	 */
	public List findByNamedParam(String strhql, String name, Object param);

	/**
	 * 功能：SQL查询
	 * 
	 * @param strsql
	 * @return
	 */
	public List findBySql(String strsql);

	/**
	 * 功能：查询符合条件的记录。
	 * 
	 * @param strsql
	 * @param params
	 * @return
	 */
	public List findBySql(String strsql, List params);

	/**
	 * 功能：分页查询
	 * 
	 * @param pageNo
	 * @param pageSize
	 * @param strhql
	 * @return List
	 */
	public List query(int pageNo, int pageSize, String strhql);

	/**
	 * 功能：分页查询
	 * 
	 * @param pageNo
	 * @param pageSize
	 * @param queryString
	 * @param obj
	 * @return List
	 */
	public List query(int pageNo, int pageSize, String strhql, Object obj);

	/**
	 * 功能：分页查询
	 * 
	 * @param pageNo
	 * @param pageSize
	 * @param strhql
	 * @param params
	 * @return
	 */
	public List query(int pageNo, int pageSize, String strhql, List params);

	/**
	 * 功能：分页查询
	 * 
	 * @param pageNo
	 * @param pageSize
	 * @param strsql
	 * @return List
	 */
	public List queryBySql(int pageNo, int pageSize, String strsql);

	/**
	 * 功能：分页查询
	 * 
	 * @param pageNo
	 * @param pageSize
	 * @param strsql
	 * @param params
	 * @return
	 */
	public List queryBySql(int pageNo, int pageSize, String strsql, List params);

	/**
	 * 功能：执行SQL语句，主要是更新与删除记录的SQL语句，不需要返回值的
	 * 
	 * @param strsql
	 */
	public void excuteSql(String strsql);
}
